热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

都会|新名词_Java基础|深入理解在语言中引入“继承”的概念

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java基础|深入理解在语言中引入“继承”的概念相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java基础 | 深入理解在语言中引入“继承”的概念相关的知识,希望对你有一定的参考价值。



所有的面向对象语言三大特性之一:封装,继承,多态。其中封装性在上一篇关于类的引入种阐述得很清楚了,这里关键要理解继承,继承是如何引入的呢?如果想在一门语言中表示继承,我们该怎么表示继承呢?

0x00、深入理解子类与父类的关系

Java基础

首先,我们要知道继承这个概念在面向对象语言中本身就是和同等重要的地位,继承也是面向对象语言中最为重要的特征之一。基于类的概念,类是将需要写的代码抽象化成一个个具有相同属性或行为的东西,如果我们想要去初始化一个子类,那么一定代表是具有父类的特征的。这样我们还得到了其他好处:

  • 可以直接获取父类的字段和行为
  • 可以修改父类的行为
  • 可以重载父类的行为(即指多态的概念)
  • 可以添加新的字段和行为

这样进一步把面向对象语言具有更多的功能,更加的抽象。所以从高效使用语言和方便快捷使用语言的好处来看,既可以提高我们所写的程序的抽象程度,而且还是实现了父类代码的复用,还兼具了修改功能,以此提高了开发效率和可维护性。

我们继续考虑子类是由父类功能和属性的拓展,延伸而来的,所以想想哪个关键词可以表达派生,延伸的概念,于是引入了Extends来表示继承的概念,后面连接的类名是代表从哪里继承而来的。引入了Java中的继承是通过extends关键字来实现的。看一下代码:

class Student extends Person
expression;

注意,因为java程序所有都是拓展为类的概念,所以任何一个对象都属于一个类,如果没有extends子句,那么这个类默认为java.lang.Object的子类。并且java程序中所有的类都是直接或者间接地继承java.lang.Object得到的。可以看下面这张图,就可以很简单的理解子类,父类的关系,指学生作为一个类可以由人这个类继承来。

Java基础

类包括子类,父类和超类,其中父类包括所有直接或间接被继承的类。

Java中为了简单考虑,规定了一条规则,就是一个类只能有一个直接父类,所以引入了新名词:单继承

0x01、在继承的过程中需要注意字段部分

字段的变化情况是十分重要的:

1.父类字段的继承

因为子类就是由父类继承来的,所以,子类会自动继承父类的所有字段。即代表上述代码,Student子类自动具有父类Person的字段。

2.父类字段的重复

加入子类因为需要重新定义了与父类继承而来域变量完全相同的变量,就引入了域变量的隐藏,子类中起作用的是自己的变量,同时这也可能是我们不想用父类的这个变量,在初始赋值需要不同时就可以做到。

3.子类字段的添加

这是子类产生最开始的需求,子类区别于父类就是因为子类中多了一些自己的特征,自己的属性和方法,所以子类的添加如下,添加了学校,添加了成绩这些单独属性。

class Student extends Person
String school;
int score;

0x02、在继承的过程中需要的注意方法部分

Java基础

继承的核心想法没有变,依然是继承父类该有的东西,如果想增加子类的方法,直接增加不同命的方法就行,以下注意:

1.方法的继承

因为访问修饰符的出现(后面文章会阐述),父类只要是除了Private私有的方法,都会被子类自动继承。

2.方法的覆盖

子类因为有自己的方法,所以想根据自己的属性来实现自己的方法,但是方法又跟父类同名,那么引入一种概念叫方法覆盖,也叫重写,通过可以实现对父类方法的覆盖(Override)。以下代码:@Override指方法的重写,是子类本身的独有属性。

@Override
void method()
System.out.println("x" + y + "z")

所以,通过方法的覆盖,能够修改对象的同名方法具体实现方法

3.方法的重载

如果增加的方法同名,那么就实现了重载,既可以重载父类同名方法,也可以重载子类同名的方法,前者叫重载,后者叫多态,因为重载已经代表是重新实现同名的方法,所以,重载不需要参数列表类型相同,所以重载也就是新加的一个方法。以下代码:子类扩展了父类,覆盖了display()方法,并拥有自己的show()方法。在main()方法中,我们将为父类和子类创建对象,并调用它们各自的方法。

package com.javainterviewpoint;
public class Child extends Parent
public void display(String name)

System.out.println("Welcome to Child Class \\""+name+"\\"");

public void show()

System.out.println("show() method of Child class");

public static void main(String args[])

//为父类创建对象
Parent p = new Parent();
//调用父类方法
p.display("JavaInterviewPoint");
p.disp();

//为子类创建对象
Child c = new Child();
c.display("JavaInterviewPoint");
c.show();

当我们运行代码时,我们将得到下面的结果:

Java基础

0x03、方法重写规则总结

方法覆盖的规则:

  • 方法应该具有相同的返回类型和参数
  • 访问级别不能比方法的重写访问级别更严格
  • 不能重写声明为final或static的方法
  • 如果一个方法不能被继承,它就不能被重写
  • 不能重写构造函数

0x04、文章总结

本教程比较完整的讲解了Java如何适当的使用面向对象概念,面向对象方法,总结了子类方法的重写规则,继承与父类的关系,适用于更加深入的理解。


资料链接:

1.​​https://www.javainterviewpoint.com/what-is-method-overriding-in-java/​​

​​2.https://www.w3schools.in/java/method-overriding​​

3.​​https://www.demo2s.com/i/java/java-method-overriding.html

4.​​https://pastebin.com/dWe4h4ZQ​​

5.​​https://www.coursehero.com/file/160235765/Childjava/​​




推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
author-avatar
夫妇郭_390
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有